package com.ixuea.courses.mycloudmusicapisp.mapper;

import com.ixuea.courses.mycloudmusicapisp.domain.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 用户映射
 */
@Repository
public interface UserMapper {
    /**
     * 保存用户
     * @param data
     * @return
     */
    int create(User data);

    /**
     * 查询所有用户
     * @return
     */
    List<User> findAll();

    /**
     * 查询用户详情
     *
     * @param id
     * @return
     */
    User find(@Param("id") String id);

    /**
     * 根据手机号查询
     * @param data
     * @return
     */
    User findByPhone(@Param("data") String data);

    /**
     * 根据邮箱查询
     * @param email
     * @return
     */
    User findByEmail(String email);

    /**
     * 更新session
     * @param id
     * @param data
     * @return
     */
    int updateSessionDigest(@Param("id") String id, @Param("data") String data);

    /**
     * 根据qq id查询
     *
     * 这个方法使用注解的方式实现
     * 真实项目中，只建议简单的使用注解方式
     * 因为复杂的SQL通过这方式比较麻烦
     *
     * @param data
     * @return
     */
    @Select("select * from user where qq_id = #{data}")
    User findByQQid(String data);

    /**
     * 根据weibo_id查询
     * @param data
     * @return
     */
    User findByWeiboId(@Param("data") String data);

    /**
     * 更新用户
     *
     * @param data
     * @return
     */
    int update(User data);

    /**
     * 更新第三方账号
     *
     * @param id
     * @param account
     * @param accountDigest
     * @param accountField
     * @return
     */
    int updateAccount(@Param("id") String id,
                      @Param("account") String account,
                      @Param("accountDigest") String accountDigest,
                      @Param("accountField") String accountField);
}
